<?php

// 发立得信息发布系统房屋信息版(php+mysql) V1.0
// 演示地址: http://fang.chalide.cn
// 文件路径: inc/pubs.php
// 文件大小: 5734 字节
// 最后修改时间: 2025-05-23 15:44:12
// 作者: yujianyue
// 邮件: 15058593138@qq.com
// 版权所有,保留发行权和署名权
/**
 * 本文件功能：公共PHP函数
 * 版权声明：保留发行权和署名权
 * 作者信息：15058593138@qq.com
 */

/**
 * 返回JSON格式的提示信息
 * @param int $code 状态码 0:失败 1:成功
 * @param string $msg 提示信息
 * @param array $data 附加数据
 * @return string JSON字符串
 */
function json_msg($code, $msg, $data = []) {
    $result = ['code' => $code, 'msg' => $msg];
    if (!empty($data)) {
        $result['data'] = $data;
    }
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

/**
 * 安全过滤输入
 * @param string $str 输入字符串
 * @return string 过滤后的字符串
 */
function safe_input($str) {
    if (is_array($str)) {
        foreach ($str as $key => $value) {
            $str[$key] = safe_input($value);
        }
    } else {
        $str = trim($str);
        $str = htmlspecialchars($str, ENT_QUOTES);
    }
    return $str;
}

/**
 * 生成随机字符串
 * @param int $length 长度
 * @return string 随机字符串
 */
function random_str($length = 8) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $str = '';
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

/**
 * 检查用户是否登录
 * @param int $type 检查的用户类型，默认全部
 * @return array|null 用户信息或null
 */
function check_login($type = 0) {
    if (isset($_SESSION['user']) && !empty($_SESSION['user'])) {
        if ($type === 0 || $_SESSION['user']['type'] == $type) {
            return $_SESSION['user'];
        }
    }
    return null;
}

/**
 * 生成token防止CSRF攻击
 * @return string 生成的token
 */
function create_token() {
    $token = md5(uniqid(mt_rand(), true));
    $_SESSION['token'] = $token;
    return $token;
}

/**
 * 检查token是否有效
 * @param string $token 待检查的token
 * @return bool 是否有效
 */
function check_token($token) {
    if (isset($_SESSION['token']) && $_SESSION['token'] === $token) {
        // 使用后立即删除token，防止重复提交
        unset($_SESSION['token']);
        return true;
    }
    return false;
}

/**
 * 从CSV文件导入数据
 * @param string $file CSV文件路径
 * @param array $fields 字段名数组
 * @param string $table 表名
 * @param object $db 数据库连接对象
 * @return int 导入的记录数
 */
function import_csv($file, $fields, $table, $db) {
    if (!file_exists($file)) {
        return 0;
    }
    
    $count = 0;
    if (($handle = fopen($file, "r")) !== FALSE) {
        // 跳过标题行
        fgetcsv($handle, 1000, ",");
        
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $values = [];
            foreach ($data as $key => $value) {
                if (isset($fields[$key])) {
                    $values[$fields[$key]] = $value;
                }
            }
            
            if (!empty($values)) {
                $sql = "INSERT INTO $table SET ";
                $sets = [];
                foreach ($values as $field => $value) {
                    $sets[] = "$field = '" . $db->real_escape_string($value) . "'";
                }
                $sql .= implode(', ', $sets);
                
                if ($db->query($sql)) {
                    $count++;
                }
            }
        }
        fclose($handle);
    }
    
    return $count;
}

/**
 * 获取分页参数
 * @param int $total 总记录数
 * @param int $page 当前页码
 * @param int $limit 每页记录数
 * @return array 分页参数
 */
function get_pagination($total, $page = 1, $limit = 10) {
    $page = max(1, intval($page));
    $total_page = ceil($total / $limit);
    $total_page = max(1, $total_page);
    $page = min($page, $total_page);
    
    return [
        'page' => $page,
        'limit' => $limit,
        'total' => $total,
        'total_page' => $total_page,
        'offset' => ($page - 1) * $limit
    ];
}

/**
 * 格式化日期时间
 * @param string $datetime 日期时间
 * @param string $format 格式
 * @return string 格式化后的日期时间
 */
function format_datetime($datetime, $format = 'Y-m-d H:i:s') {
    if (empty($datetime)) return '';
    return date($format, strtotime($datetime));
}

/**
 * 检查是否为AJAX请求
 * @return bool 是否为AJAX请求
 */
function is_ajax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
           strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}

/**
 * 生成图片保存路径
 * @return string 图片保存路径
 */
function get_img_path() {
    $dir = 'imgs/' . date('Y/m/d');
    if (!is_dir($dir)) {
        mkdir($dir, 0777, true);
    }
    return $dir . '/' . date('YmdHis') . random_str() . '.jpg';
}

/**
 * 读取站点配置
 * @return array 站点配置
 */
function get_site_config() {
    global $CONFIG;
    $file = dirname(__FILE__) . '/site.json';
    if (file_exists($file)) {
        $json = file_get_contents($file);
        $config = json_decode($json, true);
        if (is_array($config)) {
            return $config;
        }
    }
    // 如果文件不存在或解析失败，使用默认配置并创建文件
    file_put_contents($file, json_encode($CONFIG, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
    return $CONFIG;
}

/**
 * 保存站点配置
 * @param array $config 站点配置
 * @return bool 是否保存成功
 */
function save_site_config($config) {
    $file = dirname(__FILE__) . '/site.json';
    return file_put_contents($file, json_encode($config, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)) !== false;
}
?>
